Function.prototype.customCall = function (context, ...params) {
  // context指传入的需要指向的对象
  context = context ?? globalThis;
  //   获取一个唯一值
  const fnSymbol = Symbol('fn');
  // this就是调用的函数。将要调用的函数放到对象当中去，就保证了this的指向
  context[fnSymbol] = this;
  //   调用
  const result = context[fnSymbol](...params);
  delete context[fnSymbol];
  //   返回调用结果
  return result;
};

function fn(name, age) {
  console.log(`${name},${this.sex},${age}`);
}
const obj = {
  sex: '男',
};
fn.customCall(obj, '小明', 18);
